{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [],
   "source": [
    "import subprocess\n",
    "import os\n",
    "import io\n",
    "import re\n",
    "from shutil import rmtree\n",
    "\n",
    "from datetime import datetime\n",
    "import abc\n",
    "import collections\n",
    "from typing import Generic, TypeVar, Generic, Optional, List, Type\n",
    "from pydantic import BaseModel, ValidationError, validator, Field\n",
    "from pydantic.generics import GenericModel\n",
    "\n",
    "import pandas as pd\n",
    "import geopandas as gpd\n",
    "\n",
    "from uuid import UUID, uuid4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "MARXAN_FOLDER = '/home/jovyan/work/datasets/raw/marxan/'\n",
    "MARXAN_EXECUTABLE = f'{MARXAN_FOLDER}/MarOpt_v243_Linux64'\n",
    "MARXAN_INPUTDATA = 'input.dat'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input  input.dat  MarOptTotalAreas.csv\tMarOpt_v243_Linux64  output\n",
      "bound.dat  puvsp.dat\t      spec.csv\tspec.dat.backup_20200401T140605\n",
      "pu.dat\t   puvsp_sporder.dat  spec.dat\tspec.dat.backup_20200401T141514\n"
     ]
    }
   ],
   "source": [
    "# Help edit the .dat files\n",
    "!ls $MARXAN_FOLDER\n",
    "!ls $MARXAN_FOLDER/input"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Helper clases and funtions for reading and data mutation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "class DatFile(object):\n",
    "    \"\"\"\n",
    "    Read and write dat files.\n",
    "    \"\"\"\n",
    "    def __init__(self, file_path: str = None):\n",
    "        # Ensure the file has the right extension\n",
    "        if file_path and not file_path.endswith('.dat'):\n",
    "            raise NameError(\"File must be a '.png' extension\")\n",
    "        \n",
    "        self.__path = file_path\n",
    "        self.data = None\n",
    "        \n",
    "    def __test_path(self, path):\n",
    "        if not self.__path and path:\n",
    "            self.__path = path\n",
    "        elif not self.__path and not path:\n",
    "            raise NameError('No path to file provided')\n",
    "    \n",
    "    def update(self, data, incremental: bool = False ):\n",
    "        \"\"\"Updates the data.\n",
    "    \n",
    "        Args:\n",
    "            data (any): The data the object should store.\n",
    "        Returns:\n",
    "            The contents of the file as a unicode string.\n",
    "        \"\"\"\n",
    "        __conversion: dict = {\n",
    "                                int: int,\n",
    "                                str: str,\n",
    "                                dict: dict,\n",
    "                                list: list\n",
    "                            }\n",
    "        if not incremental or not self.data:\n",
    "            self.data = data\n",
    "        elif type(self.data) == dict:\n",
    "            self.data.append(data)\n",
    "        else:\n",
    "            self.data = self.data + __conversion[type(self.data)](data)\n",
    "        \n",
    "    \n",
    "    def read(self, file_path: str = None):\n",
    "        \"\"\"Gets a files contents as a unicode string.\n",
    "    \n",
    "        Args:\n",
    "            filename (string): The full path to the file that will be read.\n",
    "        Returns:\n",
    "            The contents of the file as a unicode string.\n",
    "        \"\"\"\n",
    "        self.__test_path(file_path)\n",
    "        try:\n",
    "            with io.open(self.__path, mode=\"r\", encoding=\"utf-8\") as f:\n",
    "                self.data = f.readlines()\n",
    "        except (UnicodeDecodeError) as e:\n",
    "            with io.open(self.__path, mode=\"r\", encoding=\"ISO-8859-1\") as f:\n",
    "                self.data = f.read()\n",
    "        except Exception as e:\n",
    "            raise e\n",
    "    \n",
    "    def write(self, file_path: str = None):\n",
    "        \"\"\"Writes a files contents as a unicode string\n",
    "    \n",
    "        Args:\n",
    "            filename (string): The full path to the file that will be written.  \n",
    "            s (string): The unicode string to write.  \n",
    "            mode (string): Optional. The file write mode. Default value is w.  \n",
    "        Returns:\n",
    "            None  \n",
    "        \"\"\"\n",
    "        self.__test_path(file_path)\n",
    "        try:\n",
    "            with io.open(self.__path, mode, encoding=\"utf-8\") as f: \n",
    "                f.write(self.data)\n",
    "        except Exception as e:\n",
    "            raise e"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n",
      "5.0\n",
      "5sdfad\n",
      "   5.00000000E-0008\n"
     ]
    }
   ],
   "source": [
    "# Just in case we need to format the float numbers in a very specific way\n",
    "class MyNumber:\n",
    "    \"\"\"\n",
    "    Number formater wraper to allow a specific format string for a float number.\n",
    "    \"\"\"\n",
    "    def __init__(self, val):\n",
    "        self.val = val\n",
    "\n",
    "    def __format__(self,format_spec):\n",
    "        ss = ('{0:'+format_spec+'}').format(self.val)\n",
    "        if ( 'E' in ss):\n",
    "            mantissa, exp = ss.split('E')            \n",
    "            return mantissa + 'E'+ exp[0] + '00' + exp[1:]\n",
    "        return ss\n",
    "\n",
    "def num(s):\n",
    "    \"\"\"\n",
    "    Coerce Number transformation into float.\n",
    "    \"\"\"\n",
    "    try:\n",
    "        return int(s)\n",
    "    except ValueError:\n",
    "        try:\n",
    "            return float(s)\n",
    "        except ValueError:\n",
    "            return s\n",
    "\n",
    "def getSizeOfNestedList(listOfElem):\n",
    "    ''' Get number of elements in a nested list'''\n",
    "    count = 0\n",
    "    # Iterate over the list\n",
    "    for elem in listOfElem:\n",
    "        # Check if type of element is list\n",
    "        if type(elem) == list:  \n",
    "            # Again call this function to get the size of this element\n",
    "            count += getSizeOfNestedList(elem)\n",
    "        else:\n",
    "            count += 1    \n",
    "    return count\n",
    "\n",
    "def _readTabularFile(filename: str)-> dict:\n",
    "    \"\"\"\n",
    "    Gets a input.dat file and outputs a dict of parameters.\n",
    "\n",
    "    Args:\n",
    "        filename (string): The full path to the file that will be read.\n",
    "    Returns:\n",
    "        The contents of the file as a dict.\n",
    "    \"\"\"\n",
    "    inputData = DatFile(filename)\n",
    "    inputData.read()\n",
    "    outputData = []\n",
    "    for line in inputData.data:\n",
    "        pair = re.compile('\\s').split(line.strip('\\r').strip('\\n'))\n",
    "        outputData.append(pair)\n",
    "    return outputData\n",
    "\n",
    "def CreateListModelFromFile(filename: str, model: Type['Model'])-> List['Model']:\n",
    "    \"\"\"\n",
    "    Gets a input.dat file and outputs a list of selected model.\n",
    "\n",
    "    Args:\n",
    "        filename (string): The full path to the file that will be read.\n",
    "        model (Type['Model']): Data model used to read and validate the data\n",
    "    Returns:\n",
    "        The contents of the file as a Data model list.\n",
    "    \"\"\"\n",
    "    inputData = _readTabularFile(filename)\n",
    "    return [model.parse_obj(dict(zip(inputData[0], x))) for x in inputData[1:]] \n",
    "\n",
    "def CreateFileFromDF(filename: str, df: Type['Dataframe'], model: Type['Model'])-> List[list]:\n",
    "    \"\"\"\n",
    "    Gets a dataframe and outs a dat.file.\n",
    "\n",
    "    Args:\n",
    "        filename (string): The full path to the file that will be read.\n",
    "        df (Type['Dataframe']): Dataframe to save\n",
    "        model (Type['Model']): Data model used to read and validate the data\n",
    "    Returns:\n",
    "        The contents of the file as a Data model list.\n",
    "    \"\"\"\n",
    "    data = df.to_dict('records')\n",
    "    validatedData = [model(**x) for x in data]\n",
    "    \n",
    "    \n",
    "\n",
    "print(num('5'))\n",
    "print(num('5.0'))\n",
    "print(num('5sdfad'))\n",
    "print( '{0:17.8E}'.format(MyNumber(0.00000005)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[planingUnits(id=1, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=2, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=3, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=4, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=5, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=6, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=7, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=8, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=9, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=10, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=11, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=12, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=13, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=14, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=15, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=16, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=17, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=18, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=19, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=20, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=21, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=22, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=23, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=24, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=25, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=26, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=27, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=28, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=29, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=30, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=31, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=32, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=33, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=34, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=35, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=36, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=37, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=38, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=39, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=40, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=41, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=42, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=43, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=44, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=45, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=46, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=47, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=48, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=49, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=50, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=51, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=52, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=53, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=54, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=55, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=56, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=57, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=58, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=59, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=60, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=61, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=62, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=63, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=64, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=65, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=66, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=67, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=68, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=69, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=70, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=71, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=72, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=73, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=74, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=75, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=76, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=77, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=78, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=79, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=80, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=81, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=82, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=83, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=84, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=85, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=86, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=87, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=88, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=89, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=90, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=91, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=92, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=93, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=94, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=95, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=96, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=97, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=98, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=99, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=100, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=101, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=102, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=103, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=104, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=105, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=106, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=107, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=108, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=109, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=110, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=111, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=112, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=113, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=114, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=115, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=116, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=117, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=118, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=119, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=120, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=121, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=122, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=123, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=124, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=125, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=126, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=127, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=128, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=129, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=130, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=131, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=132, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=133, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=134, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=135, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=136, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=137, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=138, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=139, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=140, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=141, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=142, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=143, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=144, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=145, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=146, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=147, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=148, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=149, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=150, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=151, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=152, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=153, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=154, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=155, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=156, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=157, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=158, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=159, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=160, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=161, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=162, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=163, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=164, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=165, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=166, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=167, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=168, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=169, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=170, cost=544.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=171, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=172, cost=616.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=173, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=174, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=175, cost=496.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=176, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=177, cost=568.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=178, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=179, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=180, cost=736.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=181, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=182, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=183, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=184, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=185, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=186, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=187, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=188, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=189, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=190, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=191, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=192, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=193, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=194, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=195, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=196, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=197, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=198, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=199, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=200, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=201, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=202, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=203, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=204, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=205, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=206, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=207, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=208, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=209, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=210, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=211, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=212, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=213, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=214, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=215, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=216, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=217, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=218, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=219, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=220, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=221, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=222, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=223, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=224, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=225, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=226, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=227, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=228, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=229, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=230, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=231, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=232, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=233, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=234, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=235, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=236, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=237, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=238, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=239, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=240, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=241, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=242, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=243, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=244, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=245, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=246, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=247, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=248, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=249, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=250, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=251, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=252, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=253, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=254, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=255, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=256, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=257, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=258, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=259, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=260, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=261, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=262, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=263, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=264, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=265, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=266, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=267, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=268, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=269, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=270, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=271, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=272, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=273, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=274, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=275, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=276, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=277, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=278, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=279, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=280, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=281, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=282, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=283, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=284, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=285, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=286, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=287, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=288, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=289, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=290, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=291, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=292, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=293, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=294, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=295, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=296, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=297, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=298, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=299, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=300, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=301, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=302, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=303, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=304, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=305, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=306, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=307, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=308, cost=424.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=309, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=310, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=311, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=312, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=313, cost=656.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=314, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=315, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=316, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=317, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=318, cost=424.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=319, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=320, cost=476.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=321, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=322, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=323, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=324, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=325, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=326, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=327, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=328, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=329, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=330, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=331, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=332, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=333, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=334, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=335, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=336, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=337, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=338, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=339, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=340, cost=796.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=341, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=342, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=343, cost=784.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=344, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=345, cost=796.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=346, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=347, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=348, cost=544.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=349, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=350, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=351, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=352, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=353, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=354, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=355, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=356, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=357, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=358, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=359, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=360, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=361, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=362, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=363, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=364, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=365, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=366, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=367, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=368, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=369, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=370, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=371, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=372, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=373, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=374, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=375, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=376, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=377, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=378, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=379, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=380, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=381, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=382, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=383, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=384, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=385, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=386, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=387, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=388, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=389, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=390, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=391, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=392, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=393, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=394, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=395, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=396, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=397, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=398, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=399, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=400, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=401, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=402, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=403, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=404, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=405, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=406, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=407, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=408, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=409, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=410, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=411, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=412, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=413, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=414, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=415, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=416, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=417, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=418, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=419, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=420, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=421, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=422, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=423, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=424, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=425, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=426, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=427, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=428, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=429, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=430, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=431, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=432, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=433, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=434, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=435, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=436, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=437, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=438, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=439, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=440, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=441, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=442, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=443, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=444, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=445, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=446, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=447, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=448, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=449, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=450, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=451, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=452, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=453, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=454, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=455, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=456, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=457, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=458, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=459, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=460, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=461, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=462, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=463, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=464, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=465, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=466, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=467, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=468, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=469, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=470, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=471, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=472, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=473, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=474, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=475, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=476, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=477, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=478, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=479, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=480, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=481, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=482, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=483, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=484, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=485, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=486, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=487, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=488, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=489, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=490, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=491, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=492, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=493, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=494, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=495, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=496, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=497, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=498, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=499, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=500, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=501, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=502, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=503, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=504, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=505, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=506, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=507, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=508, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=509, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=510, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=511, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=512, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=513, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=514, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=515, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=516, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=517, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=518, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=519, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=520, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=521, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=522, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=523, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=524, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=525, cost=496.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=526, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=527, cost=584.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=528, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=529, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=530, cost=656.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=531, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=532, cost=568.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=533, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=534, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=535, cost=736.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=536, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=537, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=538, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=539, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=540, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=541, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=542, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=543, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=544, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=545, cost=656.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=546, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=547, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=548, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=549, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=550, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=551, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=552, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=553, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=554, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=555, cost=704.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=556, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=557, cost=784.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=558, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=559, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=560, cost=736.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=561, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=562, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=563, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=564, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=565, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=566, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=567, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=568, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=569, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=570, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=571, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=572, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=573, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=574, cost=960.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=575, cost=960.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=576, cost=960.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=577, cost=960.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=578, cost=960.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=579, cost=936.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=580, cost=720.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=581, cost=1248.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=582, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=583, cost=1528.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=584, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=585, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=586, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=587, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=588, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=589, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=590, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=591, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=592, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=593, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=594, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=595, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=596, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=597, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=598, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=599, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=600, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=601, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=602, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=603, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=604, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=605, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=606, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=607, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=608, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=609, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=610, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=611, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=612, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=613, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=614, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=615, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=616, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=617, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=618, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=619, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=620, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=621, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=622, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=623, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=624, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=625, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=626, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=627, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=628, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=629, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=630, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=631, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=632, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=633, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=634, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=635, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=636, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=637, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=638, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=639, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=640, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=641, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=642, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=643, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=644, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=645, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=646, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=647, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=648, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=649, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=650, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=651, cost=1200.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=652, cost=1240.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=653, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=654, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=655, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=656, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=657, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=658, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=659, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=660, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=661, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=662, cost=1560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=663, cost=1200.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=664, cost=1200.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=665, cost=1440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=666, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=667, cost=1480.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=668, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=669, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=670, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=671, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=672, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=673, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=674, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=675, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=676, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=677, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=678, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=679, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=680, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=681, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=682, cost=424.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=683, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=684, cost=436.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=685, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=686, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=687, cost=424.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=688, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=689, cost=472.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=690, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=691, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=692, cost=568.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=693, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=694, cost=476.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=695, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=696, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=697, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=698, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=699, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=700, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=701, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=702, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=703, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=704, cost=796.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=705, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=706, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=707, cost=544.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=708, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=709, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=710, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=711, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=712, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=713, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=714, cost=404.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=715, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=716, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=717, cost=656.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=718, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=719, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=720, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=721, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=722, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=723, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=724, cost=764.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=725, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=726, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=727, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=728, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=729, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=730, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=731, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=732, cost=416.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=733, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=734, cost=396.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=735, cost=360.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=736, cost=808.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=737, cost=1240.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=738, cost=1272.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=739, cost=1560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=740, cost=1560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=741, cost=1512.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=742, cost=1480.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=743, cost=1480.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=744, cost=1480.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=745, cost=1120.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=746, cost=1120.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=747, cost=1336.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=748, cost=1480.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=749, cost=1372.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=750, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=751, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=752, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=753, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=754, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=755, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=756, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=757, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=758, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=759, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=760, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=761, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=762, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=763, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=764, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=765, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=766, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=767, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=768, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=769, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=770, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=771, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=772, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=773, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=774, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=775, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=776, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=777, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=778, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=779, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=780, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=781, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=782, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=783, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=784, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=785, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=786, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=787, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=788, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=789, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=790, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=791, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=792, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=793, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=794, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=795, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=796, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=797, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=798, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=799, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=800, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=801, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=802, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=803, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=804, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=805, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=806, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=807, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=808, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=809, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=810, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=811, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=812, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=813, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=814, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=815, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=816, cost=360.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=817, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=818, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=819, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=820, cost=1560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=821, cost=1200.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=822, cost=1200.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=823, cost=720.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=824, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=825, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=826, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=827, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=828, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=829, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=830, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=831, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=832, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=833, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=834, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=835, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=836, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=837, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=838, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=839, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=840, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=841, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=842, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=843, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=844, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=845, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=846, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=847, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=848, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=849, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=850, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=851, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=852, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=853, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=854, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=855, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=856, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=857, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=858, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=859, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=860, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=861, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=862, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=863, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=864, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=865, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=866, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=867, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=868, cost=760.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=869, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=870, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=871, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=872, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=873, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=874, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=875, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=876, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=877, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=878, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=879, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=880, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=881, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=882, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=883, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=884, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=885, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=886, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=887, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=888, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=889, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=890, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=891, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=892, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=893, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=894, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=895, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=896, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=897, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=898, cost=240.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=899, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=900, cost=360.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=901, cost=520.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=902, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=903, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=904, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=905, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=906, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=907, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=908, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=909, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=910, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=911, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=912, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=913, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=914, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=915, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=916, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=917, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=918, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=919, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=920, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=921, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=922, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=923, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=924, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=925, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=926, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=927, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=928, cost=496.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=929, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=930, cost=568.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=931, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=932, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=933, cost=736.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=934, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=935, cost=784.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=936, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=937, cost=640.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=938, cost=736.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=939, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=940, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=941, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=942, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=943, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=944, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=945, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=946, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=947, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=948, cost=656.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=949, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=950, cost=544.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=951, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=952, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=953, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=954, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=955, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=956, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=957, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=958, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=959, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=960, cost=440.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=961, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=962, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=963, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=964, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=965, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=966, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=967, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=968, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=969, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=970, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=971, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=972, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=973, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=974, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=975, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=976, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=977, cost=800.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=978, cost=560.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=979, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=980, cost=336.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=981, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=982, cost=360.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=983, cost=960.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=984, cost=960.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=985, cost=1056.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=986, cost=1120.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=987, cost=1168.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=988, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=989, cost=1600.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=990, cost=1168.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=991, cost=880.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=992, cost=864.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=993, cost=720.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=994, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=995, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=996, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=997, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=998, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=999, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " planingUnits(id=1000, cost=400.0, status=0, xloc=None, yloc=None),\n",
       " ...]"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#userPlaningUnits = CreateListModelFromFile(f'{MARXAN_FOLDER}/{userInputFile.INPUTDIR}/{userInputFile.PUNAME}', planingUnits)\n",
    "data = userPlaningUnits_df.to_dict('records')\n",
    "def testDf(data: list):\n",
    "    return [planingUnits(**x) for x in data]\n",
    "testDf(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Input data model types"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "class inputDatFile(BaseModel):\n",
    "    \"\"\"\n",
    "    This is the description of the input data clase base on marxan input file.\n",
    "    \"\"\"\n",
    "    \n",
    "    # General Parameters\n",
    "    VERSION: str = Field('0.1', title='Version', \n",
    "                         description='Type of input file')\n",
    "    BLM:  Optional[float] = Field(0., title='Boundary Length Modifier', \n",
    "                           description='Boundary Length Modifier')\n",
    "    PROP: float = Field(0., title='Starting Proportion', \n",
    "                            description='Proportion of planning units in initial reserve system')\n",
    "    RANDSEED: Optional[int] = Field(-1, title='Random Seed', \n",
    "                              description='Random seed number')\n",
    "    NUMREPS: int = Field(1, title='Repeat Runs', \n",
    "                             description='The number of repeat runs you wish to do')\n",
    "    BESTSCORE: Optional[int] = Field(0, title='Best Score Speedup', \n",
    "                               description='This variable tells Marxan not to keep track of the best score \\\n",
    "                                until it reaches a specified minimum level.')\n",
    "    \n",
    "    # Annealing Parameters\n",
    "    NUMITNS: int = Field(0, title='Number of Iterations', \n",
    "                         description='Number of iterations for annealing')\n",
    "    STARTTEMP: int = Field(1, title='Initial Temperature', \n",
    "                           description='Starting temperature for annealing')\n",
    "    COOLFAC: int = Field(0, title='Cooling Factor', \n",
    "                         description='Cooling factor for annealing')\n",
    "    NUMTEMP: int = Field(1, title='Temperature Decreases', \n",
    "                         description='Number of temperature decreases for annealing')\n",
    "    \n",
    "    # Cost Threshold\n",
    "    COSTTHRESH: Optional[float] = Field(0, title='Threshold', \n",
    "                              description='Cost threshold')\n",
    "    THRESHPEN1: Optional[float] = Field(0, title='Penalty Factor A', \n",
    "                              description='Size of cost threshold penalty')\n",
    "    THRESHPEN2: Optional[float] = Field(0, title='Penalty Factor B', \n",
    "                              description='Shape of cost threshold penalty')\n",
    "    \n",
    "    # Input Files\n",
    "    INPUTDIR: str = Field('input', title='Input Folder', \n",
    "                          description='User Defined Name of the folder containing input data files')\n",
    "    SPECNAME: str = Field('spec.dat', title='Species File Name', \n",
    "                          description='Name of Conservation Feature File')\n",
    "    PUNAME: str = Field('pu.dat', title='Planning Unit File Name', \n",
    "                        description='Name of Planning Unit File')\n",
    "    PUVSPRNAME: str = Field('puvspr2.dat', title='Planning Unit versus Species', \n",
    "                            description='Name of Planning Unit versus Conservation Feature File')\n",
    "    BOUNDNAME: str = Field('bound.dat', title='Boundary Length', \n",
    "                           description='Name of Boundary Length File')\n",
    "    BLOCKDEFNAME: str = Field('blockdef.dat', title='Block Definitions', \n",
    "                              description='Name of Block Definition File')\n",
    "    \n",
    "    # Output Files\n",
    "    VERBOSITY: int =  Field(1, title='Screen Output', \n",
    "                            description='Amount of output displayed on the program screen')\n",
    "    MISSLEVEL: Optional[float] =  Field(1, title='Species missing proportion', \n",
    "                              description='Amount or target below which it is counted as ‘missing’')\n",
    "    OUTPUTDIR: str = Field('output', title='', \n",
    "                           description='User Defined Name of the folder in which to save output files')\n",
    "    SCENNAME: str = Field('Temp', title='Scenario name', \n",
    "                          description='Scenario name for the saved output files')\n",
    "    SAVERUN: Optional[int] = Field(0, title='Save each run', \n",
    "                         description='Save each run? (0 = no)')\n",
    "    SAVEBEST: Optional[int] =  Field(0, title='Save the best run', \n",
    "                           description='Save the best run? (0 = no)')\n",
    "    SAVESUM: Optional[int] =  Field(0, title='Save summary', \n",
    "                          description='Save summary information? (0 = no)')\n",
    "    SAVESCEN: Optional[int] =  Field(0, title='Save scenario', \n",
    "                           description='Save scenario information? (0 = no)')\n",
    "    SAVETARGMET: Optional[int] =  Field(0, title='Save targets met', \n",
    "                              description='Save targets met information? (0 = no)')\n",
    "    SAVESUMSOLN: Optional[int] =  Field(0, title='', \n",
    "                              description='Save summed solution information? (0 = no)')\n",
    "    SAVELOG: Optional[int] =  Field(0, title='Save summed solution', \n",
    "                          description='Save log files? (0 = no)')\n",
    "    SAVESNAPSTEPS: Optional[int] =  Field(0, title='Save snapshots', \n",
    "                                description='Save snapshots each n steps (0 = no)')\n",
    "    SAVESNAPCHANGES: Optional[int] =  Field(0, title='Save snapshots changes', \n",
    "                                  description='Save snapshots after every n changes (0 = no)')\n",
    "    SAVESNAPFREQUENCY: Optional[int] =  Field(0, title='Frequency of snapshots', \n",
    "                                    description='Frequency of snapshots if they are being used')\n",
    "    \n",
    "    # Program control.\n",
    "    RUNMODE: int = Field(1, title='Run Options', \n",
    "                         description='User Defined The method Marxan uses to find solutions')\n",
    "    \n",
    "    ITIMPTYPE: int =  Field(1, title='Iterative Improvement', \n",
    "                            description='Iterative improvement type')\n",
    "    HEURTYPE: int =  Field(1, title='Heuristic', \n",
    "                           description='Heuristic type')\n",
    "    CLUMPTYPE: Optional[int] =  Field(0, title='Clumping Rule', \n",
    "                            description='Clumping penalty type')\n",
    "    # class Config:\n",
    "    \n",
    "    @validator('RUNMODE')\n",
    "    def RUNMODE_is_valid(cls, method: int) -> int:\n",
    "        allowed_set = {0: 'Apply Simulated Annealing followed by a Heuristic',\n",
    "                      1: 'Apply Simulated Annealing followed by Iterative Improvement',\n",
    "                      2: 'Apply Simulated Annealing followed by a Heuristic, followed by Iterative',\n",
    "                      3: 'Use only a Heuristic',\n",
    "                      4: 'Use only Iterative Improvement',\n",
    "                      5: 'Use a Heuristic followed by Iterative Improvement',\n",
    "                      6: 'Use only Simulated Annealing'}\n",
    "        \n",
    "        if method not in allowed_set.keys():\n",
    "            raise ValueError(f\"must be in {allowed_set}, got '{method}'\")\n",
    "        \n",
    "        return method\n",
    "    \n",
    "    @validator('ITIMPTYPE')\n",
    "    def ITIMPTYPE_is_valid(cls, method: int) -> int:\n",
    "        allowed_set = {0: 'Normal Iterative Improvement',\n",
    "                      1: 'Two Step Iterative Improvement',\n",
    "                      2: '‘Swap’ Iterative Improvement',\n",
    "                      3: 'Normal Improvement followed by Two Step Iterative Improvement'}\n",
    "        \n",
    "        if method not in allowed_set.keys():\n",
    "            raise ValueError(f\"must be in {allowed_set}, got '{method}'\")\n",
    "        \n",
    "        return method\n",
    "    \n",
    "    @validator('HEURTYPE')\n",
    "    def HEURTYPE_is_valid(cls, method: int) -> int:\n",
    "        allowed_set = {-1:'Ignored',\n",
    "                      0: 'Richness',\n",
    "                      1: 'Greedy',\n",
    "                      2: 'Max Rarity',\n",
    "                      3: 'Best Rarity',\n",
    "                      4: 'Average Rarity',\n",
    "                      5: 'Sum Rarity',\n",
    "                      6: 'Product Irreplaceability',\n",
    "                      7: 'Summation Irreplaceability'}\n",
    "        \n",
    "        if method not in allowed_set.keys():\n",
    "            raise ValueError(f\"must be in {allowed_set}, got '{method}'\")\n",
    "        \n",
    "        return method\n",
    "    \n",
    "    @validator('VERBOSITY')\n",
    "    def VERBOSITY_is_valid(cls, method: int) -> int:\n",
    "        allowed_set = {-1:'Ignored',\n",
    "                      0: 'Silent Running',\n",
    "                      1: 'Results Only',\n",
    "                      2: 'General Progress',\n",
    "                      3: 'Detailed Progress'}\n",
    "        \n",
    "        if method not in allowed_set.keys():\n",
    "            raise ValueError(f\"must be in {allowed_set}, got '{method}'\")\n",
    "        \n",
    "        return method\n",
    "    \n",
    "    @validator('CLUMPTYPE')\n",
    "    def CLUMPTYPE_is_valid(cls, method: int) -> int:\n",
    "        allowed_set = {-1:'Ignored',\n",
    "                       0: 'Partial clumps do not count',\n",
    "                       1: 'Partial clumps count half',\n",
    "                       3: 'Graduated penalty'}\n",
    "        \n",
    "        if method not in allowed_set.keys():\n",
    "            raise ValueError(f\"must be in {allowed_set}, got '{method}'\")\n",
    "        \n",
    "        return method\n",
    "    \n",
    "    def to_dat(self):\n",
    "        \"\"\"\n",
    "        Gets a input.dat file and outputs a dict of parameters.\n",
    "\n",
    "        Args:\n",
    "            \n",
    "        Returns:\n",
    "            The data model converted on a readeable dat string.\n",
    "        \"\"\"\n",
    "        s:str = ''\n",
    "        for key, value in self.dict().items():\n",
    "            #add the key\n",
    "            s = s + key + \" \" + str(value) + \"\\n\"\n",
    "        return s\n",
    "    \n",
    "    @classmethod\n",
    "    def from_dat(cls: Type['Model'], dat: str)-> 'Model':\n",
    "        \"\"\"\n",
    "        Gets a input.dat file and outputs a dict of parameters.\n",
    "\n",
    "        Args:\n",
    "            filename (string): The full path to the file that will be read.\n",
    "        Returns:\n",
    "            The contents of the file as a dict.\n",
    "        \"\"\"\n",
    "        obj = {}\n",
    "        \n",
    "        for line in dat:\n",
    "            if re.search('[A-Z1-9_]{2,}', line, re.DOTALL):\n",
    "                pair = line.strip('\\r').strip('\\n').split(' ')\n",
    "                assert len(pair) == 2 # if the list has more or less attribute than 2 it means we have make a mistake spliting stuff\n",
    "                obj[pair[0]] = num(pair[1].strip(' '))\n",
    "                \n",
    "        return cls.parse_obj(obj)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [],
   "source": [
    "class conservationFeature(BaseModel):\n",
    "    \"\"\"\n",
    "    The Conservation Feature File contains information about each of the conservation\n",
    "    features being considered, such as their name, target representation, and the penalty\n",
    "    if the representation target is not met. It has the default name ‘spec.dat’. Because of\n",
    "    this name it is sometimes referred to as the Species File, although conservation\n",
    "    features will oftenbe surrogates such as habitat type rather than actual species. \n",
    "    \"\"\"\n",
    "    id: int = Field(..., title='Conservation Feature ID', \n",
    "                    description='A unique numerical identifier for each conservation feature. \\\n",
    "                                Be careful not to duplicate id numbers as Marxan will ignore all but the last one.')\n",
    "    \n",
    "    # All variables you wish to take on Block Definition attributes should\n",
    "    # have their value entered as -1 in the Conservation Feature File\n",
    "    type: Optional[int] = Field(title='Conservation Feature Type', \n",
    "                                description='Used to define groups of conservation features for which a number of \\\n",
    "                                umbrella attributes can be set for all features within the specified group (or “type”). \\\n",
    "                                Each group of features must have a unique numerical identifier. This variable is used \\\n",
    "                                in conjunction with the Block Definition File (see Section 3.3.2) which will contain \\\n",
    "                                the attributes to be assigned to a particular group of conservation features.')\n",
    "    \n",
    "    # If Block Definition File is being used for this feature, then the Target for Feature \n",
    "    # Occurrences should be set to -1 here.\n",
    "    target: float = Field(..., title=' Feature Representation Target', \n",
    "                          description='The target amount of each conservation feature to be included \\\n",
    "                                        in the solutions. These values represent constraints on potential solutions \\\n",
    "                                        to the reserve selection problem. That is, for a reserve solution to be \\\n",
    "                                        feasible it must include at least this amount of each feature. The target \\\n",
    "                                        value is expressed in the same units used to define the amount of each feature in \\\n",
    "                                        each planning unit, contained in the Planning Unit versus Conservation Feature \\\n",
    "                                        File (see Section 3.2.4). However, units from different conservation features can vary \\\n",
    "                                        (e.g. hectares of habitat for one feature and number of occurrences for another, nests \\\n",
    "                                        for a third and length of stream for a fourth).')\n",
    "    \n",
    "    # If Block Definition File is being used for this feature, then the Target for Feature \n",
    "    # Occurrences should be set to -1 here.\n",
    "    spf: float = Field(..., title='Conservation Feature Penalty Factor', \n",
    "                       description='The letters ‘spf’ stands for Species Penalty Factor. This \\\n",
    "                                    variable is more correctly referred to as the Conservation Feature Penalty \\\n",
    "                                    Factor.')\n",
    "    target2: Optional[float] = Field(title='Minimum Clump Size', \n",
    "                                     description='This variable specifies a minimum clump size for the\\\n",
    "                                                representation of conservation features in the reserve system. If the amount\\\n",
    "                                                of a conservation feature found in a clump is less that this value, then it does\\\n",
    "                                                not count towards meeting the conservation target')\n",
    "    \n",
    "    # If Block Definition File is being used for this feature, then the Target for Feature \n",
    "    # Occurrences should be set to -1 here.\n",
    "    targetocc: Optional[float] = Field(title='Target for Feature Occurrences', \n",
    "                                       description='This variable specifies the minimum number of occurrences of a\\\n",
    "                                                    conservation feature required in a reserve system. This value can be used in\\\n",
    "                                                    situations where even though your conservation target may be met in one planning\\\n",
    "                                                    unit, you would like it to be represented in a greater number of planning units,\\\n",
    "                                                    possibly for risk spreading')\n",
    "    \n",
    "    name: Optional[str] = Field(title='Conservation Feature Name', \n",
    "                                description='The alphabetical (no numbers!) name of each conservation feature')\n",
    "    \n",
    "    # If Block Definition File is being used for this feature, then the Target for Feature \n",
    "    # Occurrences should be set to -1 here.\n",
    "    sepnum: Optional[float] = Field(title='Target for Separated Feature Occurrences', \n",
    "                                    description='The number of mutually separated occurrences of a feature \\\n",
    "                                                required in the reserve system')\n",
    "    \n",
    "    # If Block Definition File is being used for this feature, then the Target for Feature \n",
    "    # Occurrences should be set to -1 here.\n",
    "    sepdistance: Optional[float] = Field(title='Minimum Separation Distance', \n",
    "                                      description=' Used in conjunction with ‘sepnum’ (above), this variable specifies\\\n",
    "                                                    the minimum distance at which planning units holding a conservation feature\\\n",
    "                                                    are considered to be separate.')\n",
    "\n",
    "        \n",
    "class planingUnits(BaseModel):\n",
    "    \"\"\"\n",
    "    The Planning Unit File contains all the information related to planning units, except\n",
    "    for the distribution of conservation features across planning units (which is held in the\n",
    "    Planning Unit versus Conservation Feature File ). The default name for this file is\n",
    "    ‘pu.dat’.\n",
    "    \"\"\"\n",
    "    id: int = Field(..., title=' Planning Unit ID', \n",
    "                    description='A unique numerical identifier for each planning unit')\n",
    "    cost: Optional[float] = Field(1, title='Planning Unit Cost', \n",
    "                        description='The cost of including each planning unit in the reserve system. ')\n",
    "    status: Optional[int] = Field(0, title='Planning Unit Status', \n",
    "                          description='This variable defines whether a planning unit (PU) is locked in or out of\\\n",
    "                                      the initial and final reserve systems. It can take one of four values:')\n",
    "    \n",
    "    # This variable is only required if a minimum separation between feature occurrences has been specified in the\n",
    "    # ‘sepdistance’ column of the Conservation Feature File \n",
    "    xloc: Optional[float] = Field(title='X Planning Unit Location', \n",
    "                          description='The x-axis coordinate of the planning unit')\n",
    "    \n",
    "    # This variable is only required if a minimum separation between feature occurrences has been specified in the\n",
    "    # ‘sepdistance’ column of the Conservation Feature File \n",
    "    yloc: Optional[float] = Field(title='Y Planning Unit Location', \n",
    "                          description='The y-axis coordinate of the planning unit')\n",
    "    \n",
    "    @validator('status')\n",
    "    def status_is_valid(cls, method: int) -> int:\n",
    "        allowed_set = {\n",
    "                       0: 'The PU is not guaranteed to be in the initial reserve',\n",
    "                       1: 'The PU will be included in the initial reserve',\n",
    "                       2: 'The PU is fixed in the reserve system (“locked in”).\\\n",
    "                           It starts in the initial reserve system and cannot be removed.',\n",
    "                       3: 'The PU is fixed outside the reserve system (“locked out”).\\\n",
    "                       It is not included in the initial reserve system and cannot be added.'\n",
    "                      }\n",
    "        \n",
    "        if method not in allowed_set.keys():\n",
    "            raise ValueError(f\"must be in {allowed_set}, got '{method}'\")\n",
    "        \n",
    "        return method\n",
    "\n",
    "\n",
    "class planningUnitVSConservationFeatureV(BaseModel):\n",
    "    \"\"\"\n",
    "    The Planning Unit versus Conservation Feature File contains information on the\n",
    "    distribution of conservation features across planning units. It has the default file\n",
    "    name, ‘puvpsr2.dat’. There are two different formats this file can take, vertical and\n",
    "    horizontal. Either is acceptable and Marxan will test the header line to determine\n",
    "    which format is being used. This one represent the vertical format\n",
    "    \"\"\"\n",
    "    species: int = Field(..., title='Conservation Feature ID', \n",
    "                         description='The unique id number of each conservation feature. This must \\\n",
    "                                    correspond to the id numbers used in the Conservation Feature File.')\n",
    "    pu: int = Field(..., title='Planning Unit ID', \n",
    "                         description='The id of a planning unit where the conservation feature listed on \\\n",
    "                                    the same row occurs. The planning unit id numbers must correspond \\\n",
    "                                    to the numbers used in the Planning Unit File')\n",
    "    amount: float = Field(..., title='Conservation Feature Amount', \n",
    "                         description='The amount of the conservation feature occurring in the planning unit \\\n",
    "                                      listed on the same row. This amount may be related to the abundance \\\n",
    "                                      of a species or the extent of a certain habitat type. ',\n",
    "                          gt=0)\n",
    "\n",
    "class planningUnitVSConservationFeatureH(BaseModel):\n",
    "    \"\"\"\n",
    "    The Planning Unit versus Conservation Feature File contains information on the\n",
    "    distribution of conservation features across planning units. It has the default file\n",
    "    name, ‘puvpsr2.dat’. There are two different formats this file can take, vertical and\n",
    "    horizontal. Either is acceptable and Marxan will test the header line to determine\n",
    "    which format is being used. . This one represent the horizontal format:\n",
    "    the Planning Unit versus Conservation Feature File is simply a matrix of \n",
    "    planning units versus conservation features.\n",
    "    \"\"\"\n",
    "    pu: int = Field(..., title='Planning Unit ID',\n",
    "                    description='Amount of output displayed on the program screen')\n",
    "    species: List[int] = Field(..., title='Conservation Feature IDs', \n",
    "                               description='Amount of output displayed on the program screen')\n",
    "    amount: List[float] = Field(..., title='Conservation Feature Amount', \n",
    "                                 description='Amount of output displayed on the program screen',\n",
    "                                 gt=0)\n",
    "\n",
    "\n",
    "### Optional data file structures\n",
    "\n",
    "class boundaryLength(BaseModel):\n",
    "    \"\"\"\n",
    "    The Boundary Length File contains information about the length or ‘effective length’\n",
    "    of shared boundaries between planning units. This file is necessary if you wish to use\n",
    "    the Boundary Length Modifier to improve the compactness of reserve solutions (bound.dat).\n",
    "    \n",
    "    !Any missing values within the file will prevent Marxan from running, for instance \n",
    "    !if ‘id1’ and ‘id2’ are set but no value for ‘boundary’ is entered.\n",
    "    \"\"\"\n",
    "    # important not to duplicate boundaries\n",
    "    id1: int = Field(..., title='Planning Unit ID', \n",
    "                     description='‘id1’ and ‘id2’ contain the id number of the two \\\n",
    "                     planning units that share a boundary.')\n",
    "    id2: int = Field(..., title=' Planning Unit ID', \n",
    "                     description='id1’ and ‘id2’ contain the id number of the two \\\n",
    "                     planning units that share a boundary.')\n",
    "    boundary: float = Field(..., title='Boundary Length', \n",
    "                           description='Boundary Length or boundary cost is relative \\\n",
    "                           measure of how important it is to include one planning unit \\\n",
    "                           in the reserve system, given the inclusion of the other.')\n",
    "        \n",
    "class blockDefinition(BaseModel):\n",
    "    \"\"\"\n",
    "    The Block Definition File is very similar to the Conservation Feature File (see\n",
    "    Section 3.2.2) and is used to set default variable values for groups of conservation\n",
    "    features. It is always used in conjunction with the Conservation Feature File.\n",
    "    \"\"\"\n",
    "    type: int = Field(..., title='Conservation Feature Type', \n",
    "                      description='A unique numerical identifier for groups of conservation features. \\\n",
    "                                   Each ‘type’ must correspond exactly with the types identified \\\n",
    "                                   in the Conservation Feature File ')\n",
    "    \n",
    "    # If this is set Planning Unit versus Conservation Feature File ‘target’, should be set to ‘-1’.\n",
    "    prop: Optional[float] = Field(default=..., title='Proportion Target for Feature Representation', \n",
    "                                description='The variable ‘prop’, is short for proportion and can \\\n",
    "                                            be used to set the proportion (i.e. percentage) of a \\\n",
    "                                            conservation feature to be included in the reserve system.',\n",
    "                               ge =0, le =1)\n",
    "        \n",
    "    target: float = Field(..., title=' Feature Representation Target', \n",
    "                          description='The target amount of each conservation feature to be included \\\n",
    "                                        in the solutions. These values represent constraints on potential solutions \\\n",
    "                                        to the reserve selection problem. That is, for a reserve solution to be \\\n",
    "                                        feasible it must include at least this amount of each feature. The target \\\n",
    "                                        value is expressed in the same units used to define the amount of each feature in \\\n",
    "                                        each planning unit, contained in the Planning Unit versus Conservation Feature \\\n",
    "                                        File (see Section 3.2.4). However, units from different conservation features can vary \\\n",
    "                                        (e.g. hectares of habitat for one feature and number of occurrences for another, nests \\\n",
    "                                        for a third and length of stream for a fourth).')   \n",
    "    spf: float = Field(-1, title='Conservation Feature Penalty Factor', \n",
    "                       description='The letters ‘spf’ stands for Species Penalty Factor. This \\\n",
    "                                    variable is more correctly referred to as the Conservation Feature Penalty \\\n",
    "                                    Factor.')\n",
    "    target2: Optional[float] = Field(-1, title='Minimum Clump Size', \n",
    "                                     description='This variable specifies a minimum clump size for the \\\n",
    "                                                representation of conservation features in the reserve system. If the amount\\\n",
    "                                                of a conservation feature found in a clump is less that this value, then it does\\\n",
    "                                                not count towards meeting the conservation target')\n",
    "    \n",
    "    targetocc: Optional[float] = Field(-1, title='Target for Feature Occurrences', \n",
    "                                       description='This variable specifies the minimum number of occurrences of a\\\n",
    "                                                    conservation feature required in a reserve system. This value can be used in\\\n",
    "                                                    situations where even though your conservation target may be met in one planning\\\n",
    "                                                    unit, you would like it to be represented in a greater number of planning units,\\\n",
    "                                                    possibly for risk spreading')\n",
    "\n",
    "    sepnum: Optional[float] = Field(-1, title='Target for Separated Feature Occurrences', \n",
    "                                  description='The number of mutually separated occurrences of a feature \\\n",
    "                                                required in the reserve system')\n",
    "    \n",
    "    sepdistance: Optional[float] = Field(-1, title='Minimum Separation Distance', \n",
    "                                      description=' Used in conjunction with ‘sepnum’ (above), this variable specifies\\\n",
    "                                                    the minimum distance at which planning units holding a conservation feature\\\n",
    "                                                    are considered to be separate.')    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Output datamodels types "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Examples Read and write"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true,
     "source_hidden": true
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "VERSION 0.1\n",
      "BLM 0.0\n",
      "PROP 0.0\n",
      "RANDSEED -1\n",
      "NUMREPS 1\n",
      "BESTSCORE 0\n",
      "NUMITNS 0\n",
      "STARTTEMP 1\n",
      "COOLFAC 0\n",
      "NUMTEMP 1\n",
      "COSTTHRESH 0\n",
      "THRESHPEN1 0\n",
      "THRESHPEN2 0\n",
      "INPUTDIR input\n",
      "SPECNAME spec.dat\n",
      "PUNAME pu.dat\n",
      "PUVSPRNAME puvspr2.dat\n",
      "BOUNDNAME bound.dat\n",
      "BLOCKDEFNAME blockdef.dat\n",
      "VERBOSITY 1\n",
      "MISSLEVEL 1\n",
      "OUTPUTDIR output\n",
      "SCENNAME Temp\n",
      "SAVERUN 0\n",
      "SAVEBEST 0\n",
      "SAVESUM 0\n",
      "SAVESCEN 0\n",
      "SAVETARGMET 0\n",
      "SAVESUMSOLN 0\n",
      "SAVELOG 0\n",
      "SAVESNAPSTEPS 0\n",
      "SAVESNAPCHANGES 0\n",
      "SAVESNAPFREQUENCY 0\n",
      "RUNMODE 1\n",
      "ITIMPTYPE 1\n",
      "HEURTYPE 1\n",
      "CLUMPTYPE 0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Create a new input.dat file with by default values\n",
    "test = DatFile()\n",
    "example = inputDatFile()\n",
    "test.update(example.to_dat())\n",
    "print(test.data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true,
     "source_hidden": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'VERSION': '0.1',\n",
       " 'BLM': 1.0,\n",
       " 'PROP': 0.5,\n",
       " 'RANDSEED': -1,\n",
       " 'NUMREPS': 100,\n",
       " 'BESTSCORE': 0,\n",
       " 'NUMITNS': 1000000,\n",
       " 'STARTTEMP': -1,\n",
       " 'COOLFAC': -1,\n",
       " 'NUMTEMP': 10000,\n",
       " 'COSTTHRESH': 0.0,\n",
       " 'THRESHPEN1': 0.0,\n",
       " 'THRESHPEN2': 0.0,\n",
       " 'INPUTDIR': 'input',\n",
       " 'SPECNAME': 'spec.dat',\n",
       " 'PUNAME': 'pu.dat',\n",
       " 'PUVSPRNAME': 'puvsp.dat',\n",
       " 'BOUNDNAME': 'bound.dat',\n",
       " 'BLOCKDEFNAME': 'blockdef.dat',\n",
       " 'VERBOSITY': 2,\n",
       " 'MISSLEVEL': 0.95,\n",
       " 'OUTPUTDIR': 'output',\n",
       " 'SCENNAME': 'output',\n",
       " 'SAVERUN': 3,\n",
       " 'SAVEBEST': 3,\n",
       " 'SAVESUM': 0,\n",
       " 'SAVESCEN': 3,\n",
       " 'SAVETARGMET': 3,\n",
       " 'SAVESUMSOLN': 3,\n",
       " 'SAVELOG': 3,\n",
       " 'SAVESNAPSTEPS': 0,\n",
       " 'SAVESNAPCHANGES': 0,\n",
       " 'SAVESNAPFREQUENCY': 0,\n",
       " 'RUNMODE': 1,\n",
       " 'ITIMPTYPE': 1,\n",
       " 'HEURTYPE': -1,\n",
       " 'CLUMPTYPE': 0}"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# read an existing input.dat file\n",
    "InputFile = DatFile(f'{MARXAN_FOLDER}/{MARXAN_INPUTDATA}')\n",
    "InputFile.read()\n",
    "userInputFile = inputDatFile.from_dat(InputFile.data)\n",
    "userInputFile.dict()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true,
     "source_hidden": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'bound.dat'"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "example2.BOUNDNAME"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>cost</th>\n",
       "      <th>status</th>\n",
       "      <th>xloc</th>\n",
       "      <th>yloc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id   cost  status  xloc  yloc\n",
       "0   1  400.0       0  None  None\n",
       "1   2  400.0       0  None  None\n",
       "2   3  400.0       0  None  None\n",
       "3   4  400.0       0  None  None\n",
       "4   5  400.0       0  None  None"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "userPlaningUnits = CreateListModelFromFile(f'{MARXAN_FOLDER}/{userInputFile.INPUTDIR}/{userInputFile.PUNAME}', planingUnits)\n",
    "# userPlaningUnits[:3]\n",
    "userPlaningUnits_df = pd.DataFrame([s.__dict__ for s in userPlaningUnits])\n",
    "userPlaningUnits_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id1</th>\n",
       "      <th>id2</th>\n",
       "      <th>boundary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>4000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>2000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>73</td>\n",
       "      <td>2000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>2000.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id1  id2  boundary\n",
       "0    1    1    4000.0\n",
       "1    1    2    2000.0\n",
       "2    1   73    2000.0\n",
       "3    2    2    2000.0\n",
       "4    2    3    2000.0"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "userBoundData = CreateListModelFromFile(f'{MARXAN_FOLDER}/{userInputFile.INPUTDIR}/{userInputFile.BOUNDNAME}', boundaryLength)\n",
    "userBoundData_df = pd.DataFrame([s.__dict__ for s in userBoundData])\n",
    "userBoundData_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>species</th>\n",
       "      <th>pu</th>\n",
       "      <th>amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>37</td>\n",
       "      <td>1</td>\n",
       "      <td>470000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>39</td>\n",
       "      <td>1</td>\n",
       "      <td>3480000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>40</td>\n",
       "      <td>1</td>\n",
       "      <td>50000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>39</td>\n",
       "      <td>2</td>\n",
       "      <td>4000000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>37</td>\n",
       "      <td>3</td>\n",
       "      <td>10000.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   species  pu     amount\n",
       "0       37   1   470000.0\n",
       "1       39   1  3480000.0\n",
       "2       40   1    50000.0\n",
       "3       39   2  4000000.0\n",
       "4       37   3    10000.0"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# this is the vertical file; for the horizontal one this needs to change a bit\n",
    "userPuvsp2Data = CreateListModelFromFile(f'{MARXAN_FOLDER}/{userInputFile.INPUTDIR}/{userInputFile.PUVSPRNAME}', planningUnitVSConservationFeatureV)\n",
    "userPuvsp2Data_df = pd.DataFrame([s.__dict__ for s in userPuvsp2Data])\n",
    "userPuvsp2Data_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>type</th>\n",
       "      <th>target</th>\n",
       "      <th>spf</th>\n",
       "      <th>target2</th>\n",
       "      <th>targetocc</th>\n",
       "      <th>name</th>\n",
       "      <th>sepnum</th>\n",
       "      <th>sepdistance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>VALUE_1</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>VALUE_2</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>VALUE_3</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>VALUE_4</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "      <td>VALUE_5</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id  type  target  spf target2  targetocc     name sepnum sepdistance\n",
       "0   1  None     0.0  1.0    None        0.0  VALUE_1   None        None\n",
       "1   2  None     0.0  1.0    None        0.0  VALUE_2   None        None\n",
       "2   3  None     0.0  1.0    None        0.0  VALUE_3   None        None\n",
       "3   4  None     0.0  1.0    None        0.0  VALUE_4   None        None\n",
       "4   5  None     0.0  1.0    None        0.0  VALUE_5   None        None"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "userSpecData = CreateListModelFromFile(f'{MARXAN_FOLDER}/{userInputFile.INPUTDIR}/{userInputFile.SPECNAME}', conservationFeature)\n",
    "userSpecData_df = pd.DataFrame([s.__dict__ for s in userSpecData])\n",
    "userSpecData_df.head()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Execute Marxan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Marxan v 2.43\n",
      "\n",
      "Marine Reserve Design via Annealing\n",
      "\n",
      "Coded by Ian Ball, modified by Matthew Watts\n",
      "Written by Ian Ball and Hugh Possingham\n",
      "\n",
      "ian.ball@aad.gov.au\n",
      "h.possingham@uq.edu.au\n",
      "m.watts@uq.edu.au\n",
      "\n",
      "Marxan website\n",
      "\n",
      "http://www.uq.edu.au/marxan\n",
      "\n",
      "\n",
      "Entering in the data files\n",
      "There are 12178 Planning units.\n",
      "12178 Planning Unit names read in\n",
      "59 species read in\n",
      "25108 connections entered\n",
      "36859 conservation values counted, 718502 big matrix size, 5.12998% density of matrix\n",
      "36859 conservation values counted, 718502 big matrix size, 5.12998% density of matrix\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Pre-processing Section.\n",
      "59 species are already adequately represented.\n",
      "\n",
      "Run 1   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29397760.0 Cost 3445760.0 PUs 6111 Connection 25952000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 2   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29081748.0 Cost 3409748.0 PUs 6070 Connection 25672000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 3   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29235640.0 Cost 3459640.0 PUs 6089 Connection 25776000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 4   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29245924.0 Cost 3453924.0 PUs 6116 Connection 25792000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 5   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29395188.0 Cost 3367188.0 PUs 5967 Connection 26028000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 6   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29158144.0 Cost 3470144.0 PUs 6108 Connection 25688000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 7   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29530488.0 Cost 3390488.0 PUs 6004 Connection 26140000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 8   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29530720.0 Cost 3486720.0 PUs 6123 Connection 26044000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 9   Using Calculated Tinit = 9600.0000 Tcool = 0.99937448\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29293908.0 Cost 3433908.0 PUs 6113 Connection 25860000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 10   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29526348.0 Cost 3402348.0 PUs 6072 Connection 26124000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 0 secs\n",
      "\n",
      "Run 11   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29056440.0 Cost 3432440.0 PUs 6072 Connection 25624000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 12   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29323420.0 Cost 3459420.0 PUs 6084 Connection 25864000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 13   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28997032.0 Cost 3425032.0 PUs 6058 Connection 25572000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 14   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29641924.0 Cost 3473924.0 PUs 6162 Connection 26168000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 15   Using Calculated Tinit = 9600.0000 Tcool = 0.99937448\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29043588.0 Cost 3435588.0 PUs 6088 Connection 25608000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 16   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29004608.0 Cost 3432608.0 PUs 6102 Connection 25572000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 17   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29307772.0 Cost 3523772.0 PUs 6169 Connection 25784000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 18   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29132432.0 Cost 3428432.0 PUs 6109 Connection 25704000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 19   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29183688.0 Cost 3495688.0 PUs 6149 Connection 25688000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 20   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29162580.0 Cost 3410580.0 PUs 6054 Connection 25752000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 1 secs\n",
      "\n",
      "Run 21   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29196840.0 Cost 3428840.0 PUs 6072 Connection 25768000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 22   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28970868.0 Cost 3430868.0 PUs 6091 Connection 25540000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 23   Using Calculated Tinit = 9600.0000 Tcool = 0.99940103\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29464992.0 Cost 3420992.0 PUs 6042 Connection 26044000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 24   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29050992.0 Cost 3430992.0 PUs 6128 Connection 25620000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 25   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29473052.0 Cost 3497052.0 PUs 6176 Connection 25976000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 26   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29321356.0 Cost 3421356.0 PUs 6045 Connection 25900000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 27   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29424364.0 Cost 3460364.0 PUs 6130 Connection 25964000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 28   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29190420.0 Cost 3450420.0 PUs 6117 Connection 25740000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 29   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29063436.0 Cost 3419436.0 PUs 6073 Connection 25644000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 30   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29336524.0 Cost 3492524.0 PUs 6161 Connection 25844000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 31   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29260800.0 Cost 3420800.0 PUs 6105 Connection 25840000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 2 secs\n",
      "\n",
      "Run 32   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29562948.0 Cost 3446948.0 PUs 6092 Connection 26116000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 33   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29326392.0 Cost 3398392.0 PUs 6069 Connection 25928000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 34   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29400540.0 Cost 3464540.0 PUs 6171 Connection 25936000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 35   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29493064.0 Cost 3429064.0 PUs 6064 Connection 26064000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 36   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29132140.0 Cost 3452140.0 PUs 6105 Connection 25680000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 37   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29257316.0 Cost 3445316.0 PUs 6110 Connection 25812000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 38   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29248164.0 Cost 3424164.0 PUs 6034 Connection 25824000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 39   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29175536.0 Cost 3431536.0 PUs 6039 Connection 25744000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 40   Using Calculated Tinit = 9600.0000 Tcool = 0.99940103\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29390512.0 Cost 3498512.0 PUs 6161 Connection 25892000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 41   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29456024.0 Cost 3428024.0 PUs 6092 Connection 26028000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 42   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29000492.0 Cost 3460492.0 PUs 6105 Connection 25540000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 3 secs\n",
      "\n",
      "Run 43   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29166440.0 Cost 3434440.0 PUs 6088 Connection 25732000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 44   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29140096.0 Cost 3428096.0 PUs 6075 Connection 25712000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 45   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29549748.0 Cost 3433748.0 PUs 6066 Connection 26116000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 46   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29024192.0 Cost 3460192.0 PUs 6130 Connection 25564000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 47   Using Calculated Tinit = 9600.0000 Tcool = 0.99940103\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29152580.0 Cost 3428580.0 PUs 6080 Connection 25724000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 48   Using Calculated Tinit = 9600.0000 Tcool = 0.99940103\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29398080.0 Cost 3414080.0 PUs 6068 Connection 25984000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 49   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29358480.0 Cost 3446480.0 PUs 6121 Connection 25912000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 50   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29413280.0 Cost 3509280.0 PUs 6198 Connection 25904000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 51   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29018444.0 Cost 3418444.0 PUs 6048 Connection 25600000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 52   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29499088.0 Cost 3495088.0 PUs 6156 Connection 26004000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 53   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29385372.0 Cost 3457372.0 PUs 6132 Connection 25928000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 4 secs\n",
      "\n",
      "Run 54   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29322788.0 Cost 3430788.0 PUs 6061 Connection 25892000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 55   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29516976.0 Cost 3460976.0 PUs 6108 Connection 26056000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 56   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29453664.0 Cost 3381664.0 PUs 6016 Connection 26072000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 57   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29142404.0 Cost 3418404.0 PUs 6047 Connection 25724000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 58   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29105092.0 Cost 3425092.0 PUs 6084 Connection 25680000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 59   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28973488.0 Cost 3397488.0 PUs 6030 Connection 25576000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 60   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29410772.0 Cost 3418772.0 PUs 6114 Connection 25992000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 61   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29182840.0 Cost 3462840.0 PUs 6139 Connection 25720000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 62   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29070752.0 Cost 3414752.0 PUs 6067 Connection 25656000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 63   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28950312.0 Cost 3390312.0 PUs 5995 Connection 25560000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 5 secs\n",
      "\n",
      "Run 64   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29504032.0 Cost 3488032.0 PUs 6140 Connection 26016000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 65   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29291588.0 Cost 3475588.0 PUs 6185 Connection 25816000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 66   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29219372.0 Cost 3439372.0 PUs 6096 Connection 25780000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 67   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29311156.0 Cost 3423156.0 PUs 6062 Connection 25888000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 68   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29381024.0 Cost 3485024.0 PUs 6139 Connection 25896000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 69   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28893296.0 Cost 3425296.0 PUs 6021 Connection 25468000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 70   Using Calculated Tinit = 9600.0000 Tcool = 0.99940103\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28967460.0 Cost 3451460.0 PUs 6096 Connection 25516000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 71   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29316332.0 Cost 3456332.0 PUs 6136 Connection 25860000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 72   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29223388.0 Cost 3423388.0 PUs 6128 Connection 25800000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 73   Using Calculated Tinit = 9600.0000 Tcool = 0.99937448\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28944492.0 Cost 3424492.0 PUs 6107 Connection 25520000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 74   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29231596.0 Cost 3487596.0 PUs 6131 Connection 25744000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 6 secs\n",
      "\n",
      "Run 75   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29284264.0 Cost 3416264.0 PUs 6069 Connection 25868000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 76   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29483720.0 Cost 3419720.0 PUs 6078 Connection 26064000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 77   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29319444.0 Cost 3427444.0 PUs 6068 Connection 25892000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 78   Using Calculated Tinit = 9600.0000 Tcool = 0.99935539\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28789672.0 Cost 3361672.0 PUs 6002 Connection 25428000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 79   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29083764.0 Cost 3443764.0 PUs 6056 Connection 25640000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 80   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29315624.0 Cost 3499624.0 PUs 6156 Connection 25816000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 81   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29499832.0 Cost 3459832.0 PUs 6064 Connection 26040000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 82   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29332604.0 Cost 3444604.0 PUs 6147 Connection 25888000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 83   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29177692.0 Cost 3429692.0 PUs 6063 Connection 25748000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 84   Using Calculated Tinit = 9600.0000 Tcool = 0.99940103\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29395320.0 Cost 3459320.0 PUs 6089 Connection 25936000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 85   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29587460.0 Cost 3471460.0 PUs 6127 Connection 26116000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 7 secs\n",
      "\n",
      "Run 86   Using Calculated Tinit = 9600.0000 Tcool = 0.99936051\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29559128.0 Cost 3475128.0 PUs 6184 Connection 26084000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 87   Using Calculated Tinit = 9600.0000 Tcool = 0.99940103\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29383108.0 Cost 3423108.0 PUs 6068 Connection 25960000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 88   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29474504.0 Cost 3434504.0 PUs 6077 Connection 26040000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 89   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29167716.0 Cost 3415716.0 PUs 6089 Connection 25752000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 90   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29641188.0 Cost 3469188.0 PUs 6163 Connection 26172000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 91   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29585036.0 Cost 3425036.0 PUs 6059 Connection 26160000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 92   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29722532.0 Cost 3526532.0 PUs 6225 Connection 26196000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 93   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29352208.0 Cost 3412208.0 PUs 6051 Connection 25940000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 94   Using Calculated Tinit = 9600.0000 Tcool = 0.99940103\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29346132.0 Cost 3454132.0 PUs 6147 Connection 25892000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 95   Using Calculated Tinit = 9600.0000 Tcool = 0.99928612\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 28944448.0 Cost 3416448.0 PUs 6072 Connection 25528000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Iterative Improvement:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Best:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "Time passed so far is 8 secs\n",
      "\n",
      "Run 96   Using Calculated Tinit = 9600.0000 Tcool = 0.99922198\n",
      "Creating the initial reserve\n",
      "\n",
      "Init:Value 29448412.0 Cost 3476412.0 PUs 6129 Connection 25972000.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n",
      "ThermalAnnealing:Value 0.0 Cost 0.0 PUs 0 Connection 0.0 Missing 0 Shortfall 0.00 Penalty 0.0 MPM 1.0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "rmtree(f'{MARXAN_FOLDER}/{userInputFile.OUTPUTDIR}')\n",
    "os.mkdir(f'{MARXAN_FOLDER}/{userInputFile.OUTPUTDIR}')\n",
    "\n",
    "#EXECUTES MARXAN\n",
    "# Needs to execute marxan from the marxan root folder in order to make the file find the required data.\n",
    "os.chdir(MARXAN_FOLDER)\n",
    "\n",
    "with subprocess.Popen([MARXAN_EXECUTABLE],\n",
    "                             stdout=subprocess.PIPE,\n",
    "                             stderr=subprocess.STDOUT,\n",
    "                             universal_newlines=True,\n",
    "                          bufsize=-1) as process:\n",
    "\n",
    "    while process.poll() is None:\n",
    "        output = process.stdout.readline()\n",
    "        if output:\n",
    "            print(output.strip())\n",
    "\n",
    "os.chdir('/home/jovyan/work/notebooks/Lab')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Postprocess Output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
